#include <stdio.h>

int main()
{
  int arr[4] = {10, 20, 30, 40};

  // 方式1: 指向数组第一个元素的指针
  int *p = arr;

  // 方式2: 指向整个数组的指针
  int (*p_array)[4] = &arr;

  printf("数组地址: %p\n", (void *)arr);
  printf("&arr地址: %p\n", (void *)&arr);

  printf("\nint *p = arr:\n");
  printf("p地址: %p, 值: %d\n", (void *)p, *p);
  printf("p+1地址: %p, 值: %d\n", (void *)(p + 1), *(p + 1));

  printf("\nint (*p_array)[4] = &arr:\n");
  printf("p_array地址: %p\n", (void *)p_array);
  printf("(*p_array)[0] = %d\n", (*p_array)[0]);
  printf("p_array+1地址: %p\n", (void *)(p_array + 1));

  return 0;
}